<?php
use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;
/**
 * 验证手机号
 */
function checkTelFormat($phoneNumber)
{
    $pattern = "/^1[34578]\d{9}$/";
    $phoneStatus = preg_match($pattern, $phoneNumber);
    if ($phoneStatus == 1) {
        return true;
    } else {
        return false;
    }
}

/**
 * 发送短信
 * @param $tel String 手机号
 * @param $tpl String 短信模板编号
 * @param $code array 短信数据
 * @return array
 */
function sendSms($phone,$tpl,$code){
    vendor("Aliyun.vendor/autoload");
    Config::load();
    $accessKeyId = "LTAIoxk4rOiZAsmr";
    $accessKeySecret = "0Ja1yuXFwuXh3ILqy3IA5dpr3FdpAt";
    //短信API产品名（短信产品名固定，无需修改）
    $product = "Dysmsapi";
    //短信API产品域名（接口地址固定，无需修改）
    $domain = "dysmsapi.aliyuncs.com";
    //暂时不支持多Region（目前仅支持cn-hangzhou请勿修改）
    $region = "cn-hangzhou";
    //初始化访问的acsCleint
    $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
    DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
    $acsClient= new DefaultAcsClient($profile);
    $request = new SendSmsRequest;
    //必填-短信接收号码。支持以逗号分隔的形式进行批量调用，批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
    $request->setPhoneNumbers($phone);
    //必填-短信签名
    $request->setSignName("三鑫灯世界");
    //必填-短信模板Code
    $request->setTemplateCode($tpl);
    //选填-假如模板中存在变量需要替换则为必填(JSON格式),友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
    $request->setTemplateParam(json_encode($code));
    //选填-发送短信流水号
    $request->setOutId("1234");
    //发起访问请求
    $acsResponse = $acsClient->getAcsResponse($request);
    return $acsResponse;
}

/**
 *  图片上传处理
 *  @return  -1 ：失败   成功：返回地址
 */
function uploadPicture(){

    $upload = new \Think\Upload();
    $upload->maxSize   =     3145728 ;
    $upload->exts      =     array('jpg', 'gif', 'png', 'jpeg');
    $upload->rootPath  =     C('UPLOAD_DIR');
    $upload->savePath  =     '';
    $upload->saveRule  =     'time';
    $info   =   $upload->upload();
    if($info) {
        foreach($info as $file){
            if ($file['key']=='picture'){
                $img_url=substr(C('UPLOAD_DIR'),1).$file[savepath].$file[savename];
                return $img_url;
            }else{
                return false;
            }
        }
    }else{
        return false;
    }
}

//多图上传
function upload(){
    $upload = new \Think\Upload();// 实例化上传类
    $upload->maxSize   =     3145728 ;// 设置附件上传大小
    $upload->exts      =     array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
    $upload->rootPath  =      './upload/'; // 设置附件上传根目录
    $upload->savePath  =      ''; // 设置附件上传（子）目录
    // 上传文件
    $info   =   $upload->upload();
    $picture = '';
    if(!$info) {// 上传错误提示错误信息
        $this->error($upload->getError());
    }else{// 上传成功 获取上传文件信息
        foreach($info as $k => $file){
            $picture[$k] = '/upload/'.$file['savepath'].$file['savename'];
        }
    }
    return $picture;
}

/**
 * pc支付宝支付
 * @param $out_trade_no  订单编号，必填
 * @param $proName       商品名称，必填
 * @param $total_amount  订单总额，必填
 * @param string $body   订单描述 ，可空
 */
function alipay($out_trade_no,$proName,$total_amount,$body=''){
    Vendor('Alipay.aop.AopClient');
    Vendor('Alipay.aop.request.AlipayTradePagePayRequest');
    //请求
    $c = new \AopClient();
    $config = C('alipay');
    $c->appId = $config['app_id'];
    $c->rsaPrivateKey = $config['merchant_private_key'];
    $c->format = "json";
    $c->charset= "UTF-8";
    $c->signType= "RSA2";
    $c->alipayrsaPublicKey = $config['alipay_public_key'];
    $request = new \AlipayTradePagePayRequest();
    $request->setReturnUrl($config['return_url']);
    $request->setNotifyUrl($config['notify_url']);
    $request->setBizContent("{" .
        "    \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," .
        "    \"subject\":\"$proName\"," .
        "    \"out_trade_no\":\"$out_trade_no\"," .
        "    \"total_amount\":$total_amount," .
        "    \"body\":\"$body\"" .
        "  }");
    $result = $c->pageExecute ($request);
    return $result;
}

/**
 * 微信扫码支付
 * @param $order_number 订单编号
 * @param $money        订单金额（单位：元）
 * @param $notify_url   异步通知地址
 * @return mixed   返回支付url
 */
function wxpay($order_number,$money,$notify_url){
    Vendor('Wxpay.example.WxPay#NativePay');
    Vendor('Wxpay.lib.WxPay#Api');
    Vendor('Wxpay.lib.WxPay#Data');
    Vendor('Wxpay.lib.WxPay#Config');
    Vendor('Wxpay.lib.WxPay#Exception');
    $notify = new \NativePay();
    $input = new \WxPayUnifiedOrder();
    $input->SetBody('订单号：'.$order_number);    //描述
    //$input->SetAttach("$test");  //设置附加数据，在查询API和支付通知中原样返回，该字段主要用于商户携带订单的自定义数据
    $input->SetOut_trade_no($order_number);   //订单号
    $input->SetTotal_fee($money*100);       //单位为分，只能传整数
    $input->SetTime_start(date("YmdHis"));
    $input->SetTime_expire(date("YmdHis", time() + 60));
    //$input->SetGoods_tag("test");
    $input->SetNotify_url($notify_url);
    $input->SetTrade_type("NATIVE");
    $input->SetProduct_id("123456789");  //此id为二维码中包含的商品ID，商户自行定义
    $result = $notify->GetPayUrl($input);
    $url = $result["code_url"];
    return $url;
}